#ifndef ENTITY_H
#define ENTITY_H

#include "GameOpt.h"

class Point;

class Entity 
{
public:
	Entity(const char, Point &,
			   unsigned int = 0, unsigned int = 0, 
			   unsigned int = 0, unsigned int = 0,
			   unsigned int = 0, unsigned int = 0);
	virtual ~Entity();

	virtual Point reqMove(Maze &) = 0; // Pure Virtual Function
	virtual char kind() const = 0; // Pure Virtual Function
	virtual unsigned int incExperience(unsigned int iExp)=0;// Pure Virtual Function

	char getcToken() const;

	bool setPower(unsigned int Power);
	unsigned int getPower() const;

	bool setDefense(unsigned int Defense);
	unsigned int getDefense() const;

	bool setHealth(unsigned int Health);
	unsigned int getHealth() const;
	bool setMaxHealth(unsigned int Health);
	unsigned int getMaxHealth() const;
	bool incHealth(unsigned int Health);//increase the health, it can inc only upto the max value

	bool setMovement(unsigned int Movement);
	bool decMovement();		//decrement 1 from the movement
	bool resetMovement();	//set the movement back to his max value
	unsigned int getMovement() const;
	bool setMaxMovement(unsigned int Movement);
	unsigned int getMaxMovement() const;

	bool setPos(const Point);
	bool setPos(const unsigned int ,const unsigned int );
	Point getPos() const;
	bool isActive() const; //check if the Entity is stiil active. meaning-if it have eanogh health points

protected:
	unsigned int uiPower;	//the Atacking Points of the Entity
	unsigned int uiDefense;//the Defending Points of the Entity
	unsigned int uiHealth, uiMaxHealth; //the Current Health, and the Maximum
	unsigned int uiMovement, uiMaxMovement;//The Current Movement and the maximum
	char cToken; //Entity is represented by this char
	Point Pos; //the locaion of the Entity on the board
};
#endif
